/*
 * data_struct.h
 *
 *  Created on: Sep 17, 2020
 *      Author: daniel
 */

#ifndef INC_DATA_STRUCT_H_
#define INC_DATA_STRUCT_H_

#include <stdint.h>

typedef struct {
	uint8_t		dataMask;

	int16_t		temperature;			// 单位：0.01度
	int16_t		humidity;					// 单位：0.01%
	uint16_t	wind_dir;				// 单位：度
	uint16_t	wind_speed;				// 单位：0.1m/s
	uint16_t	pressure;				// 单位：mbar
	uint16_t	solar_radiation;		// 单位：w/m2
	uint32_t	illumination;			// 单位：lux
	uint16_t	uv_index;				// 单位：0.01
	uint16_t	uva_value;				// 单位：0.01
	uint16_t	uvb_value;				// 单位：0.01
	uint32_t	rain;					// 单位：0.1mm（距离上次上报后的雨量汇总）
	uint16_t	lightning_dist;			// 0:表示没有雷电，其他值表示雷电发生距离(KM)

	uint16_t	battery_voltage;		// 单位：mV
	int16_t		battery_current;		// 单位：0.1ma

	uint8_t		firmware;				// 固件状态  0：初始状态（无意义），1：正在OTA下载， 2：已经是相同版本， 3：固件校验失败或其他错误
} WS_DATA;

#define FIRMWARE_NONE		0
#define FIRMWARE_OTA		1
#define FIRMWARE_SAME		2
#define FIRMWARE_ERROR		3

typedef struct {
	uint8_t		tag[16];			// MD5:128bit
	uint32_t	firmwareVer;
	uint16_t	firmwareSize;
} FIRMWARE_INFO;

#define	FIRMWARE_INFO_NONE		0
#define FIRMWARE_INFO_NEW		1
#define FIRMWARE_INFO_REBOOT	2
#define FIRMWARE_INFO_CONFIRM	3

typedef struct {
	uint8_t			data;				// 0：无Info， 1：有固件信息，2：重启, 3：确认收到上一个反馈
	FIRMWARE_INFO	firmware_info;
} WS_DATA_ACK;


#define	CMD_DATA				0x00
#define CMD_FIRMWARE_GET		0x01

#define CMD_DATA_ACK			0x10
#define CMD_FIRMWARE_DATA		0x11


#define DATA_BASIC				(0x01)		// 基础数据
#define DATA_FIRMWARE			(0x10)


#define MAX_LORA_BUFFER_SIZE		100

#define LORA_OTA_PACKET_SIZE		64

#endif /* INC_DATA_STRUCT_H_ */
